#ifndef _UIBASEIMPL_H_
#define _UIBASEIMPL_H_


#include "stdafx.h"
#include <ui/iuibase.h>
#include <http/ihttp.h>
#include <io/iframe.h>
#include <compat/thread.h>


class CUiBaseImpl :		public IUiBase,
						public IPlugin,
						public IPluginRun,
						public IHttpNotify,
						public CUnknownImp
{
public:
	CUiBaseImpl(void);
	virtual ~CUiBaseImpl(void);
public:
	UNKNOWN_IMP3_(IPlugin, IPluginRun, IUiBase);
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	std_method_impl init_class(IBase* prot, IBase* punkOuter);
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	std_method(Init)(void*);
	std_method(Uninit)();
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	std_method(Start)();
	std_method(Stop)();
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	//IUiBase
	std_method_(HWND, Create)(HWND hParentHwnd);
	std_method(Destroy)();
	std_method_(BOOL, Show)(int nCmdShow);
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	//IHttpNotify
	virtual ULONG Event(ULONG ulevent);
	virtual ULONG SendHead(void* data, ULONG nSize, size_t nLen);
	virtual ULONG SendBody(void* data, ULONG nSize, size_t nLen);
	virtual ULONG RecvHead(void* data, ULONG nSize, size_t nLen);
	virtual ULONG RecvBody(void* data, ULONG nSize, size_t nLen);
	//////////////////////////////////////////////////////////////////////////

	virtual ULONG OnEventError(ULONG ulevent);
private:
	_lComPtr<IComRunningObjectTable>	m_pRot;
	_lComPtr<IHttp>						m_pIHttp;
	_lComPtr<IAsynIo>					m_pIAsynIo;
	_lComPtr<IHttp_t>					m_pIHttpClient;
	_lComPtr<IWriteFile>				m_pIWriteFile;
	os_sem_t							m_sem;
};



#endif 
